0. 서론

최근 데이터 분석 도구를 이용한 암호학 분류에 관심이 생겨 관련 도구를 찾아봤습니다. 기존에 Pandas는 너무 옟날에 만들어져 현대 GB급 데이터를 처리하는데 적합하지 않은것에 반해 polars는 RUST로 만들어져 다중 CPU 코어 사용에 불필요한 메모리 복사가 없습니다. 이 글은 Polars를 어떻게 설치하고, 어떤 기능을 제공하는지 공식 문서를 바탕으로 정리한 글입니다.

1. 설치

일반적인 설치

Polars는 사용 환경에 맞춰 여러 설치 옵션을 제공합니다. 가장 기본적인 설치는 다음 명령으로 할 수 있습니다.

pip install polars
 
# CPU에서 AVX2를 지원하는 경우
pip install polars[rtcompat]

64비트 행으로 확장하기

Polars는 기본적으로 개의 행을 지원합니다. 이보다 더 많은 행을 다뤄야 하는 경우 까지 확장할 수 있는 옵션으로 설치할 수 있습니다.

pip install polars[rt64]

Python에서 기타 도구와 연결 및 옵션

전체

Tag설명
all모든 선택 기능을 설치합니다.

GPU

Tag설명
gpuNVIDIA GPU에서 쿼리를 실행합니다.

상호 운용성

Tag설명
pandaspandas 데이터프레임/시리즈와 데이터를 상호 변환합니다.
numpyNumPy 배열과 데이터를 상호 변환합니다.
pyarrowPyArrow 테이블/배열과 데이터를 상호 변환합니다.
pydanticPydantic 모델의 데이터를 Polars로 변환합니다.

Excel

Tag설명
calaminecalamine 엔진으로 Excel 파일을 읽습니다.
openpyxlopenpyxl 엔진으로 Excel 파일을 읽습니다.
xlsx2csvxlsx2csv 엔진으로 Excel 파일을 읽습니다.
xlsxwriterXlsxWriter 엔진으로 Excel 파일을 씁니다.
excel지원되는 모든 Excel 엔진을 설치합니다.

데이터베이스

Tag설명
adbcArrow Database Connectivity(ADBC) 엔진으로 데이터베이스를 읽고 씁니다.
connectorxConnectorX 엔진으로 데이터베이스를 읽습니다.
sqlalchemySQLAlchemy 엔진으로 데이터베이스에 씁니다.
database지원되는 모든 데이터베이스 엔진을 설치합니다.

클라우드

Tag설명
fsspec원격 파일 시스템을 읽고 씁니다.

기타 I/O

Tag설명
deltalakeDelta 테이블을 읽고 씁니다.
icebergApache Iceberg 테이블을 읽습니다.

기타

Tag설명
asyncLazyFrame을 비동기로 수집합니다.
cloudpickle사용자 정의 함수를 직렬화합니다.
graphLazyFrame을 그래프로 시각화합니다.
plotplot 네임스페이스를 통해 데이터프레임을 그립니다.
stylestyle 네임스페이스를 통해 데이터프레임 스타일을 지정합니다.
timezone시간대 기능을 지원합니다.1
pip install 'polars[tools1, tools2 ... ]'
 
# 사용 예시
pip install 'polars[all]'
pip install 'polars[numpy,fsspec]'

호출 방법

import polars as pl

Rust에서 기타 도구와 연결 및 옵션

[dependencies]
polars = {
	version = "0.26.1",
	features = [
		"lazy",
		"temporal",
		"describe",
		"json",
	]
}
  • 추가 데이터 타입:
    • dtype-date
    • dtype-datetime
    • dtype-time
    • dtype-duration
    • dtype-i8
    • dtype-i16
    • dtype-i128
    • dtype-u8
    • dtype-u16
    • dtype-u128
    • dtype-categorical
    • dtype-struct
  • lazy - 지연 실행 API:
    • regex - 열 선택에 정규식을 사용합니다.
    • dot_diagram - lazy 논리 계획에서 dot 다이어그램을 생성합니다.
  • sql - SQL 쿼리를 Polars로 전달합니다.
  • streaming - RAM보다 큰 데이터셋을 처리할 수 있습니다.
  • random - 무작위로 샘플링한 값으로 배열을 생성합니다.
  • ndarray - DataFrame을 ndarray로 변환합니다.
  • temporal - 시간 관련 데이터 타입에 대해 Chrono와 Polars 간 변환을 제공합니다.
  • timezones - 시간대 기능을 활성화합니다.
  • strings - StringChunked를 위한 추가 문자열 유틸리티입니다.
    • string_pad - pad_start, pad_end, zfill에 사용합니다.
    • string_to_integer - parse_int에 사용합니다.
  • object - ObjectChunked<T>라는 제네릭 ChunkedArray를 지원합니다. T에 대해 제네릭이며, Any 트레이트를 통해 Series에서 다운캐스팅할 수 있습니다.
  • 성능 관련:
    • nightly - SIMD, specialization 등 nightly 전용 기능을 활성화합니다.
    • performant - 더 많은 빠른 경로를 사용하지만 컴파일 시간이 길어집니다.
    • bigidx - 매우 많은 행을 다룰 때 활성화합니다. 인덱스로 u64를 사용해 Polars가 훨씬 더 큰 규모까지 확장할 수 있습니다. 다만 많은 데이터 구조의 캐시 효율이 낮아져 약간 느려질 수 있습니다.
    • cse - 공통 하위 계획 제거 최적화를 활성화합니다.
  • I/O 관련:
    • serde - serde 직렬화와 역직렬화를 지원합니다. JSON과 serde가 지원하는 다른 직렬화 형식에 사용할 수 있습니다.
    • serde-lazy - serde 직렬화와 역직렬화를 지원합니다. JSON과 serde가 지원하는 다른 직렬화 형식에 사용할 수 있습니다.
    • parquet - Apache Parquet 형식을 읽습니다.
    • json - JSON 직렬화를 지원합니다.
    • ipc - Arrow의 IPC 형식 직렬화를 지원합니다.
    • decompress - CSV의 압축 형식을 자동으로 추론하고 압축을 풉니다. 지원되는 압축 형식은 다음과 같습니다.
      • gzip
      • zlib
      • zstd
  • 데이터프레임 연산:
    • dynamic_group_by - 미리 정의한 키 대신 시간 창을 기준으로 그룹화합니다. 롤링 윈도우 그룹화 연산도 함께 활성화합니다.
    • sort_multiple - 데이터프레임을 여러 열 기준으로 정렬할 수 있게 합니다.
    • rows - 행으로 데이터프레임을 만들고 dataframes에서 행을 추출합니다. pivot과 transpose 연산도 함께 활성화합니다.
    • join_asof - 정확히 같은 키가 아니라 가장 가까운 키를 기준으로 ASOF 조인을 수행합니다.
    • cross_join - 두 데이터프레임의 카테시안 곱을 생성합니다.
    • semi_anti_join - SEMI 조인과 ANTI 조인을 지원합니다.
    • row_hash - 데이터프레임 행을 UInt64Chunked로 해시하는 유틸리티입니다.
    • diagonal_concat - 서로 다른 스키마를 결합하는 대각선 연결을 지원합니다.
    • dataframe_arithmetic - 데이터프레임과 다른 데이터프레임 또는 시리즈 간 산술 연산을 지원합니다.
    • partition_by - 그룹을 기준으로 여러 데이터프레임으로 분할합니다.
  • 시리즈/표현식 연산:
    • is_in - 시리즈에 값이 포함되어 있는지 확인합니다.
    • zip_with - 두 Series 또는 ChunkedArray를 하나로 묶습니다.
    • round_series - 시리즈의 내부 부동소수점 타입을 반올림합니다.
    • repeat_by - 다른 배열이 지정한 횟수만큼 배열의 원소를 반복합니다.
    • is_first_distinct - 원소가 첫 번째 고유 값인지 확인합니다.
    • is_last_distinct - 원소가 마지막 고유 값인지 확인합니다.
    • checked_arithmetic - 잘못된 연산에서 None을 반환하는 검사 산술 연산을 지원합니다.
    • dot_product - 시리즈와 표현식에서 점곱/내적을 계산합니다.
    • concat_str - 문자열 데이터를 선형 시간에 연결합니다.
    • reinterpret - 비트를 부호 있는 값/부호 없는 값으로 재해석하는 유틸리티입니다.
    • take_opt_iter - Iterator<Item=Option<usize>>로 시리즈에서 값을 가져옵니다.
    • mode - 가장 자주 등장하는 값을 반환합니다.
    • cum_agg - cum_sum, cum_min, cum_max 집계를 지원합니다.
    • rolling_window - rolling_mean 같은 롤링 윈도우 함수를 지원합니다.
    • interpolate - 중간의 None 값을 보간합니다.
    • extract_jsonpath - StringChunked에서 jsonpath 쿼리를 실행합니다.
    • list - 리스트 유틸리티를 지원합니다.
    • list_gather - 여러 인덱스로 하위 리스트를 가져옵니다.
    • rank - 순위 알고리즘을 지원합니다.
    • moment - 첨도와 왜도 통계를 지원합니다.
    • ewma - 지수 이동 평균 창을 지원합니다.
    • abs - 시리즈의 절댓값을 구합니다.
    • arange - 시리즈에서 범위 연산을 수행합니다.
    • product - 시리즈의 곱을 계산합니다.
    • diff - diff 연산을 지원합니다.
    • pct_change - 변화율을 계산합니다.
    • unique_counts - 표현식에서 고유 값의 개수를 셉니다.
    • log - 시리즈의 로그 연산을 지원합니다.
    • list_to_struct - List를 Struct 데이터 타입으로 변환합니다.
    • list_count - 리스트의 원소 개수를 셉니다.
    • list_eval - 리스트 원소에 표현식을 적용합니다.
    • cumulative_eval - 누적 증가 창에 표현식을 적용합니다.
    • arg_where - 조건을 만족하는 위치의 인덱스를 가져옵니다.
    • search_sorted - 정렬 순서를 유지하기 위해 원소가 삽입되어야 할 위치의 인덱스를 찾습니다.
    • offset_by - 월과 윤년을 고려해 날짜에 오프셋을 더합니다.
    • trigonometry - 삼각 함수를 지원합니다.
    • sign - 시리즈 원소별 부호를 계산합니다.
    • propagate_nans - NaN을 전파하는 최솟값/최댓값 집계를 지원합니다.
  • 데이터프레임 출력 형식:
    • fmt - 데이터프레임 포매팅을 활성화합니다.

자료 출처